2022年末、改めて「Snowflakeとは?」を簡単に説明する #SnowflakeDB
はじめに
Snowflake Advent Calendar 2022 7日目の記事です。
こんにちは。Snowflake Data Superhero 2022の甲木(かつき)です。私はSnowflakeのパートナー企業のプリセールスとして、Snowflakeに関するご相談から、Snowflakeを導入するプロジェクトがスタートするまでの間を担当しています。
今年は多くの会社様から「Snowflakeというものが人気だそうだが、そもそもSnowflakeとは何なのか、どうしてここまで注目されているのか教えて欲しい」という相談を頂きました。また、GoogleでSnowflakeを検索しても「Snowflake とは」「Snowflake 何が すごい」などの検索リストが表示されています。
そこで今回は、ご相談でお伝えしている内容をまとめます。Snowflakeという名前は耳にしたが、
- Snowflakeとは何なのか
- Snowflakeがなぜ注目されているのか
こういった疑問をお持ちの方に対して、Snowflakeを理解するための「最初の取っ掛かり」の部分を簡単にまとめてお伝えします。
Snowflakeとは何なのか
Snowflakeとは、2022年現在、公式には「データクラウドサービス」を名乗っています。ただ、データクラウドと言われるとピンと来ない方も多いので、ここではわかりやすく「クラウド上で大量なデータを管理できるサービス」と説明しています。「大量なデータを管理する」とは、例えば
- データウェアハウス(データマート)
- データレイク(データウェアハウスと組み合わせればレイクハウス)
- データメッシュ
- データクリーンルーム
これらを構築する事を指しています。従って、業務システムのデータを集約して横串で分析したいと言ったような要望に応える(注1)サービスとなります。特定の業種、業態専門ではないので、大量なデータを扱うのであればどの業種、業態でも活用できます。
注1:Snowflakeは今もどんどん新しい機能を追加しています。そのため来年の今頃はまた別の用途で利用できるサービスに進化しているかも知れませんが、現時点においてまずこのような用途で導入するもの、とご理解ください。
大量なデータを集約、蓄積しているイメージ
Snowflake紹介動画 "Getting Started - Architecture & Key Concepts"より
Snowflakeがなぜ注目されているのか
ここまでで、Snowflakeがデータウェアハウスやデータレイクを構築する為に利用できるサービスであると説明しました。すると「同じようなサービスがAWSや(Amazon Redshift)Googleにも(Google BigQuery)あるのに、なぜわざわざSnowflakeを導入する企業があるのか」という疑問が起きることでしょう。この点について、基本的かつ代表的なものを紹介します。
クラウドサービスに依存しない
Snowflakeは、AWSやGoogle Cloud, Microsoft Azureなどのクラウドプラットフォームの上で動作するサービスです。例えばGoogle BigQueryを使う場合、必ずGoogle Cloudを利用する必要があるのですが、Snowflakeは利用開始の契約時点でAWS/Google Cloud/Microsoft Azureどこで動作させるかを選ぶことができます(注2)。従って、現在利用中のクラウドプラットフォームに近いところでSnowflakeを利用することができ、今までにクラウドプラットフォームに蓄積した資産、例えばS3に蓄積した履歴データなどを高速にSnowflakeで処理することが可能になります。
注2:2022年末において日本国内で利用できるクラウドプラットフォームは以下3ヶ所です。
- AWS東京リージョン(ap-northeast-1)
- AWS大阪リージョン(ap-northeast-3)
- Azure東日本リージョン(japaneast)
日本で提供されているリージョン地図
Snowflakeドキュメント "サポートされているクラウドリージョン"より
データ共有機能が昔から強力
従来、データウェアハウスのデータをグループ会社や関連取引会社などと共有する場合は、一旦データウェアハウスのデータをCSVなどにエクスポート(アンロード)して転送し、転送先のデータウェアハウスに追加ロードするなどの作業が必要でした。これに対し、Snowflakeは登場した時から"Secure Data Sharing"の名称でテーブルやビュー等のデータを直接Snowflakeの別アカウントに共有したり、参照専用のSnowflakeアカウントを提供したりする事が可能です。Snowflakeの基本機能ではありますが、データの活用が進む中、より一層この機能が活躍することになるでしょう。
データ共有のイメージ(水色が共有データ、灰色が共有され、参照可能になったデータ)
Snowflakeドキュメント "Secure Data Sharingの紹介"より
このデータ共有機能は、先述の複数のクラウドプラットフォーム上で動作できる話と組み合わせると、「AWSのデータとGoogle CloudのデータをSnowflake上で共有する」という、所謂「マルチクラウド」環境も構築する事が可能です(注3)
注3:実現するためには複数のアカウント利用契約やクラウドプラットフォームを跨ぐネットワーク通信料が発生する点を考慮する必要があります。
「性能」と「利用料金」のコントロールが簡単
Snowflakeのユーザからの検索リクエストを受けてデータを検索、集計する部分(技術的に言えば、CPUやメモリを使って演算処理をする部分)を「仮想ウェアハウス」と呼んでいます。Snowflakeの料金は、主にこの仮想ウェアハウスの規模(「サイズ」と呼びます)における単価と、仮想ウェアハウスの実行時間の掛け算となります。(注4)。
注4:厳密には、他にもストレージの利用料金やネットワーク通信料金などが利用量に比例して発生します。
一箇所に集められたデータを、複数の仮想ウェアハウスで異なる用途で同時に利用しているイメージ
Snowflake紹介動画 "Getting Started - Introduction to Virtual Warehouses"より
Snowflakeは、この仮想ウェアハウスを任意のタイミングで起動/停止/サイズ変更/並行利用が可能です。その為、以下の事が簡単に実現できます。
- 料金を抑える為に、小さいサイズの仮想ウェアハウスを使用する、処理が終わったらウェアハウスを自動停止させる
- 処理時間を短縮するため、大きなサイズの仮想ウェアハウスを使用する
- 負荷の高い処理と負荷の低い処理をそれぞれサイズの異なるウェアハウスで実行させ、トータルで性能と費用のバランスを取る
これは、他のアーキテクチャを採用しているサービスと比較すると以下の違いがあります。
仮想マシンで構成するタイプのサービスと比較して……
- 処理能力の変更を素早く行うことができる
- 同じデータに対して、同時に異なる処理能力で並列に処理ができる
アクセスしたデータ量で料金が発生するサーバレスタイプのサービスと比較して……
- 処理能力を明示的に指定、変更できる
- 時間課金なので、必要な料金が想定しやすい
このような点が、Snowflakeが注目されている主な理由だと感じています。
さいごに
今までお伝えした内容がSnowflakeの特徴の全てではありません、他にも沢山の機能があるのですが、まずSnowflakeというサービスが何なのか、そしてどういうところが注目されているのか、基本的なところを理解いただければ幸いです。
おまけ:このエントリでお伝えしなかった事
「競合サービスと比較して、どれが一番安くて性能が高いか」という質問はほぼ必ず聞かれます。しかしこれに対しての答えは、どのようなデータを管理するか、どのようなデータ検索を実行するかによって異なるので残念ながら一概には言い切れません。少なくともどれかが圧倒的にコストパフォーマンスが高い、というサービスは無いように感じています。身も蓋もない表現になりますが、「どのサービスもお金を掛けた分だけ速くなります」。どれでも良いのでまずは使ってみてください。その際に現状Snowflakeが有力な選択肢であることは間違いないと言って良いと思います。